home *** CD-ROM | disk | FTP | other *** search
- unit TestHVHookDLLUnit1;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
- StdCtrls;
-
- type
- TForm1 = class(TForm)
- HookBtn: TButton;
- UnhookBtn: TButton;
- Edit1: TEdit;
- Edit2: TEdit;
- Label1: TLabel;
- Label2: TLabel;
- Memo1: TMemo;
- BeepBtn: TButton;
- procedure HookBtnClick(Sender: TObject);
- procedure UnhookBtnClick(Sender: TObject);
- procedure BeepBtnClick(Sender: TObject);
- procedure FormDestroy(Sender: TObject);
- end;
-
- var
- Form1: TForm1;
-
- implementation
-
- {$R *.DFM}
-
- uses
- HVHookDLL;
-
- { This generic hook routine can hook any function in any DLL,
- no matter what parameters it takes.
- var
- ActualDLLProc : function: DWORD;
- procedure GenericHookProc;
- begin
- // do your stuff here
- asm
- JMP ActualDLLProc
- end;
- end; }
-
- var
- Windows_MessageBeep : function (uType: UINT): BOOL; stdcall;
-
- function HookedMessageBeep(uType: UINT): BOOL; stdcall;
- const BoolStr : array[false..true] of string = ('False', 'True');
- begin
- if Assigned(Form1) then
- Form1.Memo1.Lines.Add(Format('Called, MessageBeep(uType=%.8x)', [uType]));
- Result := Windows_MessageBeep(uType);
- if Assigned(Form1) then
- Form1.Memo1.Lines.Add(Format('Returned, MessageBeep.Result=%s', [BoolStr[Result]]));
- end;
-
- procedure TForm1.HookBtnClick(Sender: TObject);
- begin
- if HookImport('User32.dll', 'MessageBeep', @HookedMessageBeep, @Windows_MessageBeep)
- then Memo1.Lines.Add('Hooked MessageBeep')
- else Memo1.Lines.Add('Hooking failed...');
- end;
-
- procedure TForm1.UnhookBtnClick(Sender: TObject);
- begin
- if UnHookImport('User32.dll', 'MessageBeep', @HookedMessageBeep, @Windows_MessageBeep)
- then Memo1.Lines.Add('Unhooked MessageBeep')
- else Memo1.Lines.Add('Unhooking failed...');
- end;
-
- procedure TForm1.BeepBtnClick(Sender: TObject);
- begin
- Windows.MessageBeep($FFFFFFFF);
- end;
-
- procedure TForm1.FormDestroy(Sender: TObject);
- begin
- Form1 := nil;
- end;
-
- end.
-